<?php
namespace app\index\controller;
use think\Controller;
use think\Request;
use think\Cache;
//use think\cache\driver\Redis;
class Index extends Controller
{
    /**
     * 自动加载
     */
    public function _initialize()
    {
//        $config = [
//            'host'      => '127.0.0.1',
//            'port'      => 6379,
//            'password'  => '',
//            'select'    => 1,
//            'timeout'    => 0,
//            'expire'    => 0,
//            'persistent' => false,
//            'prefix'    => '',
//        ];
//
//        $this->redis = new Redis($config);
        $this->redis = new \Redis();
        $this->redis->connect(Config("REDIS_HOST"),Config("REDIS_PORT"));
    }

    //赋值
    public function index()
    {
        $this->redis->set('name','杨胜杰11');
        $this->redis->set('sex','男');
        $this->redis->set('age','22');
    }

    //获取
    public function getRedis()
    {
        $getRedis = $this->redis->get('name');
        halt($getRedis);
    }

    //删除
    public function delRedis()
    {
        $delRedis = $this->redis->del('name');
        halt($delRedis);
    }

    // DUMP 序列化键值
    public function dumpRedis()
    {
        $dumpRedis = $this->redis->dump('name');
        halt($dumpRedis);
    }

    //截取得到的字符串
    public function getRangeRedis()
    {
        $getRangeRedis = $this->redis->getrange('name',0,8); //一个汉字等于三个字节 从0开始计算
        halt($getRangeRedis);
    }

    //设置key值 并返回key的旧值
    public function getSetRedis()
    {
        $getSetRedis = $this->redis->getset('name','杨胜通');
        halt($getSetRedis);
    }

    //获取多个给定的key的值 数组的形式
    public function mgetRedis()
    {
        $mgetRedis = $this->redis->mget(['name','sex','age','phone','email']);
        halt($mgetRedis);
    }

    //设置指定的key值及过期时间  key 过期时间 秒为单位 value
    public function setexRedis()
    {
        $setex = $this->redis->setex('phone',3600,'18265554730');
        halt($setex);
    }

    //当key不存在时 赋值 存在时赋值失败
    public function setnxRedis()
    {
        $setnxRedis = $this->redis->setnx('email','200728756@qq.com');
        halt($setnxRedis);
    }

    //指定长度修改key值   杨胜杰  6->杰->通
    public function setRangeRedis()
    {
        $setRangeRedis = $this->redis->setrange('name',6,'通');
        halt($setRangeRedis);
    }

    //返回key所储存字符串的长度  name=9
    public function strlenRedis()
    {
        $strlenRedis = $this->redis->strlen('name');
        halt($strlenRedis);
    }

    //设置多个key的值 true false
    public function msetRedis()
    {
        $mset = [
            'a' => 1,
            'b' => 2,
            'c' => 3,
        ];
        $msetRedis = $this->redis->mset($mset);
        halt($msetRedis);
    }

    //当多个key不存在时 赋值 存在时赋值失败
    public function msetnxRedis()
    {
        $msetnx = [
            'a' => 3,
            'b' => 1,
            'c' => 2
        ];
        $msetRedis = $this->redis->msetnx($msetnx);
        halt($msetRedis);
    }

    //设置指定的key值及过期时间  key 过期时间 毫秒为单位 value
    public function psetexRedis()
    {
        $this->redis->PSETEX('name',10000,'杨胜通'); //设置毫秒
        $pttl = $this->redis->PTTL('name'); //查看毫秒
        halt($pttl);
    }

    //key中储存的数字值增一
    public function incrRedis()
    {
        $incrRedis = $this->redis->incr('age');
        halt($incrRedis);
    }

    //key中储存的数字加上指定的增量值
    public function incrbyRedis()
    {
        $incrbyRedis = $this->redis->incrby('age',4);
        halt($incrbyRedis);
    }

    //key中储存的数字加上指定的浮点数的增量值
    public function incrByFloatRedis()
    {
        $incrByFloatRedis = $this->redis->incrbyfloat('age',2.3);
        halt($incrByFloatRedis);
    }

    //key中储存的数字减一
    public function decrRedis()
    {
        $decrRedis = $this->redis->decr('age');
        halt($decrRedis);
    }

    //key中储存的数字减指定的增量值
    public function decrbyRedis()
    {
        $decrbyRedis = $this->redis->decrby('age',2);
        halt($decrbyRedis);
    }

    //key存在并且是个字符串 append命令将value追加的到key原来值的末尾
    public function appendRedis()
    {
        $appendRedis = $this->redis->append('name','哥');
        halt($appendRedis);
    }

    /************** 列表 **************/
    //左插入
    public function lpushRedis()
    {
        $lpushRedis = $this->redis->lpush('lpush','测试');
        halt($lpushRedis);
    }

    //命令移出并获取列表的第一个元素， 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 返回数组 1为key  2为值
    public function blpopRedis()
    {
        $blpopRedis = $this->redis->blpop('lpush',100);
        halt($blpopRedis);
    }

    //移出并获取列表的最后一个元素， 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 返回数组 1为key  2为值
    public function brpopRedis()
    {
        $brpopRedis = $this->redis->brpop('lpush',0);
        halt($brpopRedis);
    }


























}
